/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package imp.gestores;

import imp.DAO.*;
import imp.util.*;
import imp.clases.*;

import java.util.ArrayList;

import java.util.List;
import java.util.Set;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.faces.validator.ValidatorException;
import org.ajax4jsf.component.html.HtmlAjaxCommandButton;

import org.richfaces.component.html.HtmlDataTable;
import org.richfaces.component.html.HtmlDataTable;

/**
 *
 * @author Alvaro Uyaguari
 */
public class GestorIngresoIndicadores extends BeanUtil{

    private Emprendimiento currentEmprendimiento;
    private Indicador currentIndicador;
    private Indicadores currentIndicadores;

    private List<Indicador> listaIndicadores;
    private List<Indicadores> listaResultados;

    private HtmlDataTable tablaCriterios;
    private HtmlDataTable tablaIndicadores;

   
    private String accionIndicador;
    private Boolean renderIndicador;

    //Para Buscadores
    private String filtroBusqueda;


    private DAO dao = (DAO)ServiceFinder.findBean("SpringHibernateDao");

    public GestorIngresoIndicadores(){
        this.tablaIndicadores=new HtmlDataTable();

        this.currentEmprendimiento=new Emprendimiento();
        this.currentIndicador=new Indicador();
        this.currentIndicadores=new Indicadores();

        //Listo los criterios Disponibles:
        this.listarIndicadores();
        this.ponerFechaActual();
    }

    // Para Emprendimiento:

    public String grabarEmprendimiento() {

        try {
                dao.flush();
                dao.persist(this.currentEmprendimiento);


        } catch (Exception e) {
            super.addErrorMessage(e.getMessage());
        }

        return null;
    }

    public Emprendimiento getCurrentEmprendimiento() {
        return currentEmprendimiento;
    }

    public void setCurrentEmprendimiento(Emprendimiento currentEmprendimiento) {
        this.currentEmprendimiento = currentEmprendimiento;


    }

    public void pasarParamatrosEmprendimiento(ActionEvent evento) {
        GestorEmprendimientos gestorEmprendimientos = super.getBean("gestorBuscarEmprendimientos");
        gestorEmprendimientos.setCurrentEmprendimiento(this.currentIndicadores.getEmprendimiento());
        gestorEmprendimientos.setReRender("panelEvaluadores");
        gestorEmprendimientos.buscar();
        HtmlAjaxCommandButton boton = (HtmlAjaxCommandButton) evento.getComponent();
        boton.setOncomplete("Richfaces.showModalPanel('panelEmprendimiento')");
        
    }


    public void pasarParamatrosIndicador(ActionEvent evento) {
        GestorIndicadores gestorIndicadores = super.getBean("gestorBuscarIndicadores");
        gestorIndicadores.setCurrentIndicador(this.currentIndicadores.getIndicador());
        gestorIndicadores.setReRender("panelEvaluadores");
        gestorIndicadores.listar();
        HtmlAjaxCommandButton boton = (HtmlAjaxCommandButton) evento.getComponent();
        boton.setOncomplete("Richfaces.showModalPanel('panelIndicador')");
        this.listarResultados();
        this.limpiarCampos();
        
    }

    public void limpiarCampos(){
    this.currentIndicadores.setCodigo(-1);
    this.currentIndicadores.setObservacion("");
    this.currentIndicadores.setAno(0);
    this.currentIndicadores.setValor(0);
    this.currentIndicadores.setSemestre(0);
    this.currentIndicadores.setUnidad("");


    };



    //Metodos para Busuedas:

    public String getFiltroBusqueda() {
    return filtroBusqueda;
    }
    public void setFiltroBusqueda(String filtroBusqueda) {
    this.filtroBusqueda = filtroBusqueda;
    }

    //########## Para Indicador: ########## //

        public void setCurrentIndicador(Indicador currentIndicador) {
            this.currentIndicador = currentIndicador;
        }

        public Indicador getCurrentIndicador() {
            return currentIndicador;
        }



        //########## Para Indicadores: ########## //


    public void listarIndicadores(){

        try {

            listaIndicadores = dao.find(Indicador.class);

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

    }


    

    public void listarResultados(){

        String where;
        if(this.currentIndicadores.getEmprendimiento().getCodigo()!=-1){
            where="select ind from Indicadores as ind where ind.emprendimiento.codigo = " +this.currentIndicadores.getEmprendimiento().getCodigo() + ") ";
        }else{
            where="";
        }
        //this.currentIndicador.getComite().getCodigo();


        try {

            listaResultados = dao.find(where);

        } catch (Exception e) {
            this.MostrarMensaje(e.getMessage());
        }

    }

    public void nuevoRegistro() {
    try {
            this.currentIndicadores = new Indicadores();


        } catch (Throwable ex) {
            this.MostrarMensaje(ex.getMessage());


        }
        this.listarIndicadores();
        this.listarResultados();
        this.ponerFechaActual();

    }
    public void editar()
    {
            currentIndicadores = (Indicadores)tablaIndicadores.getRowData();

    }

      public String eliminar(){


		try
		{
                    this.currentIndicadores = (Indicadores) tablaIndicadores.getRowData();

                    dao.delete(currentIndicadores);
		}
		catch (Throwable ex)
		{
			super.addErrorMessage("Error" + ex.getMessage());
			return null;
		}
		this.listarResultados();
                this.limpiarCampos();

		return null;
	}


    private void MostrarMensaje(String mensaje) {
        FacesContext context = FacesContext.getCurrentInstance();
        String msg = "Error: " + mensaje;
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg));
    }

    public void ponerSeleccion(ValueChangeEvent evento) {

        FacesContext context = FacesContext.getCurrentInstance();
        Indicador valorBuscar = (Indicador)evento.getNewValue();
        

    }




    public Indicadores getCurrentIndicadores() {
        return currentIndicadores;
    }

    public void setCurrentIndicadores(Indicadores currentIndicadores) {
        this.currentIndicadores = currentIndicadores;
    }

    public HtmlDataTable getTablaIndicadores() {
        return tablaIndicadores;
    }

    public void setTablaIndicadores(HtmlDataTable tablaIndicadores) {
        this.tablaIndicadores = tablaIndicadores;
    }

    public List<Indicador> getListaIndicadores() {
        return listaIndicadores;
    }

    public void setListaIndicadores(List<Indicador> listaIndicadores) {
        this.listaIndicadores = listaIndicadores;
    }

    public List<Indicadores> getListaResultados() {
        return listaResultados;
    }

    public void setListaResultados(List<Indicadores> listaResultados) {
        this.listaResultados = listaResultados;
    }




     public void grabarIndicadores() {


        try {
            dao.persist(this.currentIndicadores);
        } catch (Throwable ex) {
            ex.printStackTrace();
            FacesContext context = FacesContext.getCurrentInstance();
            String msg = "No se pudo actualizar la oferta. " + ex.getMessage();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg));

        } finally {//Finalizar
        }
        this.listarResultados();
        this.nuevoRegistro();

    }


    //Ponemos el valor de la Fecha Actual cuando se crea un nuevo Indicador
    public void ponerFechaActual(){
    this.currentIndicadores.setFecha(new java.sql.Date(System.currentTimeMillis()));
    }


    @Override
    protected void buscar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

//Validadores 300 Caracteres:
    public void validarT(FacesContext context,
            UIComponent componentToValidate, Object value)
            throws ValidatorException {

        String texto = value.toString();
        int tamano = texto.length();

        //Valida que el tamano no sea mayor a un Numero:
        if (tamano > 300) {
            FacesMessage message = new FacesMessage("Ingrese maximo 300 caracteres en este campo. Tiene:"+tamano+" caracteres.");

            throw new ValidatorException(message);
        }

        return;
    }
}
